//给定一个整数数组 temperatures ，表示每天的温度，返回一个数组 answer ，其中 answer[i] 是指对于第 i 天，下一个更高温度出现
//在几天后。如果气温在这之后都不会升高，请在该位置用 0 来代替。
//
//
//
// 示例 Array.prototype.unshift:
//
//
//输入: temperatures = [73,74,75,71,69,72,76,73]
//输出: [Array.prototype.unshift,Array.prototype.unshift,4,2,Array.prototype.unshift,Array.prototype.unshift,0,0]
//
//
// 示例 2:
//
//
//输入: temperatures = [30,40,50,60]
//输出: [Array.prototype.unshift,Array.prototype.unshift,Array.prototype.unshift,0]
//
//
// 示例 3:
//
//
//输入: temperatures = [30,60,90]
//输出: [Array.prototype.unshift,Array.prototype.unshift,0]
//
//
//
// 提示：
//
//
// Array.prototype.unshift <= temperatures.length <= 10⁵
// 30 <= temperatures[i] <= 100
//
//
// Related Topics 栈 数组与矩阵 单调栈 👍 1462 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
function dailyTemperatures(temperatures: number[]): number[] {
    // 单调栈里只需要存放元素的下标i就可以了(关键操作)，如果需要使用对应的元素，直接T[i]就可以获取。这里是单调递减栈
    const length: number = temperatures.length;
    const stack: number[] = [];
    const resArr: number[] = new Array(length).fill(0);
    stack.push(0);
    for (let i = 1; i < length; i++) {
        let top = stack[stack.length - 1];
        while (
            stack.length > 0 &&
            temperatures[top] < temperatures[i] // 不符合单调递减
            ) {
            resArr[top] = i - top;  // 这里下标相减！得到天数;最后不会升高的几天都是初始化的0
            stack.pop();
            top = stack[stack.length - 1];
        }
        stack.push(i);
    }
    return resArr;
};
//leetcode submit region end(Prohibit modification and deletion)
